package com.shengapp.api;

import com.shengapp.models.ApiRet;
import com.shengapp.models.Config;
import com.shengapp.util.HttpUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: sheng-app
 * @Date: 2021/7/26 12:31
 */
public class Movie extends Client {

    public Movie(Config config) {
        this.key = config.key;
        this.secret = config.secret;
        this.url = config.url;
    }

    /**
     * 查询当前所有电影
     *
     * @return
     */
    public ApiRet getMovies() {
        Map<String, String> params = new HashMap<>(10);
        return new HttpUtil(url, key, secret).send("/getMovies", params, false);
    }


    /**
     * 获取未上映电影
     *
     * @return
     */
    public ApiRet getFutureMovies() {
        Map<String, String> params = new HashMap<>(10);
        return new HttpUtil(url, key, secret).send("/getFutureMovies", params, false);
    }


    /**
     * 查询当前所有电影
     *
     * @param filmId 电影编号
     * @return
     */
    public ApiRet getMovieInfo(Integer filmId) {
        Map<String, String> params = new HashMap<>(10);
        params.put("filmId", filmId.toString());
        return new HttpUtil(url, key, secret).send("/getMovieInfo", params, false);
    }


    /**
     * 查询指定城市影院。请按照影院的定位自己排序。
     * 测试环境选择北京的成龙影院有数据
     *
     * @param
     * @param cityId 城市编号
     * @return
     */
    public ApiRet getCinemas(String cityId) {
        Map<String, String> params = new HashMap<>(10);
        params.put("cityId", cityId);
        return new HttpUtil(url, key, secret).send("/getCinemas", params, false);
    }


    /**
     * 获取单个影院。请按照影院的定位自己排序。
     * 测试环境选择北京的成龙影院有数据
     *
     * @param cinemaId 影院编号
     * @param cityId   城市编号
     * @return
     */
    public ApiRet getCinemaInfo(String cityId, Integer cinemaId) {
        Map<String, String> params = new HashMap<>(10);
        params.put("cityId", cityId);
        params.put("cinemaId", cinemaId.toString());
        return new HttpUtil(url, key, secret).send("/getCinemaInfo", params, false);
    }


    /**
     * 查询指定影院排期
     *
     * @param
     * @param cinemaId 影院编号
     * @return
     */
    public ApiRet getShows(String cinemaId) {
        Map<String, String> params = new HashMap<>(10);
        params.put("cinemaId", cinemaId);
        return new HttpUtil(url, key, secret).send("/getShows", params, false);
    }

    /**
     * 查询指定影院座位。座位从左边排期，第一列在最走边。
     * 可以根据总行数rows和总列数columns循环，循环过程中，通过“row-column”格式从座位明细seats获取座位信息。如果没有的不能坐。有信息的再判断状态。
     *
     * @param
     * @param showId 排期编码
     * @return
     */
    public ApiRet getSeats(String showId) {
        Map<String, String> params = new HashMap<>(10);
        params.put("cinemaId", showId);
        return new HttpUtil(url, key, secret).send("/getSeats", params, false);
    }

    /**
     * 查询影院品牌关键词，方便过滤
     *
     * @return
     */
    public ApiRet getBrandKeywords() {
        Map<String, String> params = new HashMap<>(10);
        return new HttpUtil(url, key, secret).send("/getBrandKeywords", params, false);
    }

    /**
     * 查询影厅关键词，方便过滤
     *
     * @return
     */
    public ApiRet getHallKeywords() {
        Map<String, String> params = new HashMap<>(10);
        return new HttpUtil(url, key, secret).send("/getHallKeywords", params, false);
    }

    /**
     * 确认页面使用。需要把最小时间和最长时间显示给客户看。
     * 并且该时间建议带到订单页面，用倒计时显示给客户看。
     * 接口有营业时间限制：肯德基7:00-23:00、奈雪的茶10:00-22:00
     *
     * @param showId   String	电影票需要。
     * @param cinemaId String	电影票需要。
     * @return
     */
    public ApiRet getPricesMovie(String showId, String cinemaId) {
        Map<String, String> params = new HashMap<>(10);
        params.put("type", String.valueOf(TYPE_MOVIE));
        params.put("showId", showId);
        params.put("cinemaId", cinemaId);
        return new HttpUtil(url, key, secret).send("/getPrices", params, false);
    }

    /**
     * @param mobile           手机号
     * @param supplierCode     供应商号
     * @param partnerOrderCode 调用方订单号
     * @param cinemaId         影院编号
     * @param showId           排期编号
     * @param seats            座位信息
     * @param changeSeat       是否换附近座位 0，不换（默认），1可以换
     * @return
     */
    public ApiRet addOrderMovie(String mobile, String supplierCode, String partnerOrderCode, String cinemaId, String showId, String seats, Integer changeSeat) {
        Map<String, String> params = new HashMap<>(10);
        params.put("type", String.valueOf(TYPE_MOVIE));
        params.put("mobile", mobile);
        params.put("supplierCode", supplierCode);
        params.put("partnerOrderCode", partnerOrderCode);
        params.put("cinemaId", cinemaId);
        params.put("showId", showId);
        params.put("seats", seats);
        params.put("changeSeat", changeSeat.toString());
        return new HttpUtil(url, key, secret).send("/addOrder", params, true);
    }
}
